OpenStack 早期在部署方面相當複雜也難以維護,但是在近期 DevOps 跟 Container 的概念熱門起來後,OpenStack Community 中也出現了透過 Container 跟 Ansible 部署 OpenStack 的方式。這種方式就是透過 Kolla 跟 Kolla-Ansible 實現。Kolla 提供可 Dockerfile 來 build OpenStack 所需要的 Docker images,Kolla-Ansible 則提供了一個部署這些 Container 所需要的 Ansible playbook。本篇文章將會介紹如何透過這個專案快速部署一個 Production Ready, High-availability 的 OpenStack 環境(目前版本為 Wallaby)
一個 High-availability 的 OpenStack 環境基本上最少需要 4 個 node,3 個 controller node (ceph node) 加上至少一台的 compute node。每個 node 至少有兩個 interface。
Kolla-Ansible 將 OpenStack 網路分為幾種
除了 Neutron External Interface 需要為獨立的介面以外,其他網路都可以共用介面,預設壞帶入 network_interface 的值
本篇範例使用官方 upload 到 DockerHub 的 image,若需要自行修改 image 需要架設 Docker Registry。
在要跑部署的機器上先下載 Kolla-Ansible 的 code 並且。
git clone https://github.com/openstack/kolla-ansible -b stable/wallaby
pip install -U ansible
將 kolla-ansible 設定檔放到 /etc/kolla
底下。
cp kolla-ansible/etc/kolla/ /etc/kolla
安裝 Ansible 可以直接使用 Linux distro 的 package manager 安裝。
sudo yum install epel-release
sudo yum install ansible
sudo apt install ansible
Kolla-Ansible 所有設定皆會放在 /etc/kolla/globals.yml
內。
編輯的時候記得先將要編輯的那行前的註解拿掉,一開始填入的值是預設值。
kolla_install_type 指的是 OpenStack code 安裝的方式,binary 就是使用各個 distro 所包好的 binary 檔案,source 便是使用 OpenStack upstream 的 source code。這方面的選擇就因人而異,個人習慣都是選擇使用 source 的方式安裝
openstack_release 基本上就是 Kolla Image 所使用的 Docker repository tag,這篇範例因為是使用 DockerHub 上的 wallaby 版本所以填入 wallaby
# Valid option is Docker repository tag
openstack_release: "wallaby"
kolla_internal_vip_address 跟 kolla_internal_fqdn 是 OpenStack service 內部溝通用的 IP address 跟 FQDN,這裡根據每個人的環境不同會填入不同的 IP Address,這個 IP Address 要跟 API interface 在同一個 CIDR 並且是未被使用的 IP
kolla_external_vip_address 跟 kolla_external_fqdn 則是 OpenStack service 面向 public user 使用的 IP address 跟 FQDN
kolla_internal_vip_address: "192.168.113.0"
#kolla_internal_fqdn: "{{ kolla_internal_vip_address }}"
kolla_external_vip_address: "140.113.0.1"
kolla_external_fqdn: "openstack.igene.tw"
Docker Options 填入的是 Docker Registry 的一些認證跟位置設定,因為本篇範例是直接使用 DockerHub 上的 Image,所以保留註解即可。
Network Options 的部分是要設定上面所提到各個不同網路所使用的 interface,這邊的 interface 名稱則是要根據機器所有的 interface 名稱做更改,如果有不一樣的地方也可以在 Ansible Inventory 做 override。
#kolla_external_vip_interface: "eth0"
#api_interface: "{{ network_interface }}"
#storage_interface: "enp2s0f0"
#cluster_interface: "enp2s0f1"
#tunnel_interface: "{{ network_interface }}"
#dns_interface: "{{ network_interface }}"
#neutron_external_interface: "eth1"
這裡可以選擇要啟用的 OpenStack Service,可以根據自己需求選擇要啟用的服務。
到這裡大部分的設定皆已經完成,在實際部署 Production 環境可以根據自己需求做一些細部的更改。
如果需要針對個別 service 設定檔做更改及調整,在下一篇中會介紹如何使用 custom config。
Ansible Inventoy 就根據自己所選擇各個 node 的 hostname 或是 IP address 填入,本篇範例會包含三台 controller node control01, control02 control03
和一台 compute node compute01
,controller node 同時也是 Ceph 的 storage node,所以在 storage 的部分也是填入 controller node 的 hostname。
[control]
control01
control02
control03
[network]
control01
control02
control03
[inner-compute]
[external-compute]
compute01
[compute:children]
inner-compute
external-compute
[monitoring]
control01
control02
control03
[storage]
control01
control02
control03
如果要安裝 all-in-one 的話,可以透過 ansible/inventory/all-in-one
這個 inventory file。
Kolla-Ansible 在設定完之後實際部署很簡單,只需要跑四個指令即可。
cd kolla-ansible
tools/generate_passwords.py
generate_passwords
這個 script 將會產生 OpenStack 使用的密碼並且填入 /etc/kolla/passwords.yml
這個檔案。
tools/kolla-ansible -i ansible/inventory/multinode bootstrap-servers
bootstrap-servers
將會在要部署的 node 做一些基本的準備,例如安裝必要的套件,Docker 等。
tools/kolla-ansible -i ansible/inventory/multinode prechecks
prechecks
將會根據設定檔做一些部署前基本的檢查,例如 VIP, port 是否都沒有人使用等。
tools/kolla-ansible -i ansible/inventory/multinode deploy
deploy
將會實際部署 OpenStack 環境,包含了 pull image, run image, 將 OpenStack 設定完成等步驟都會在這個 playbook 完成。跑的時間根據網路速度跟部署規模等不太一定,快的話 20 分鐘就能部署好一個 Production Ready, High-availability 的 OpenStack 環境。
如果 deploy
跑完沒有任何問題的話,可以使用自己的 browser 到 kolla_internal_vip_address 或 kolla_internal_fqdn 就可以看到 OpenStack 介面了。
最後使用帳號 admin 跟 /etc/kolla/passwords.yml" 中的
keystone_admin_password``` 就可以登入進 Dashboard 了